package isbc.quinielas;
import jcolibri.method.retrieve.NNretrieval.similarity.LocalSimilarityFunction;
public class FuncSimilitudEstadisticasEquipo  implements LocalSimilarityFunction{
	/**
	 * This function returns the similarity of two number inside an interval.
	 * sim(x,y)=1-(|x-y|/interval)
	 * 
	 * Now it works with Number values.
	 */

		/** Interval */
		double _interval;

		/**
		 * Constructor.
		 */
		public FuncSimilitudEstadisticasEquipo(double interval) {
			_interval = interval;
		}

		/**
		 * Applies the similarity function.
		 * 
		 * @param o1
		 *            Number
		 * @param o2
		 *            Number
		 * @return result of apply the similarity function.
		 */
		public double compute(Object o1, Object o2) throws jcolibri.exception.NoApplicableSimilarityFunctionException{
			if ((o1 == null) || (o2 == null))
				return 0;
			if (!(o1 instanceof EstadisticasEquipos))
				throw new jcolibri.exception.NoApplicableSimilarityFunctionException(this.getClass(), o1.getClass());
			if (!(o2 instanceof EstadisticasEquipos))
				throw new jcolibri.exception.NoApplicableSimilarityFunctionException(this.getClass(), o2.getClass());


			EstadisticasEquipos i1 = (EstadisticasEquipos) o1;
			EstadisticasEquipos i2 = (EstadisticasEquipos) o2;
			
			double v1 = i1.getCasa() / i1.getJornada();
			double v12 = i1.getFueraCasa()/i1.getJornada();
			double v2 = i2.getCasa()/i2.getJornada();
			double v22 = i2.getFueraCasa()/i2.getJornada();
			
			double aux1 =  1 - ((double) Math.abs(v1 - v2) / _interval);
			double aux2 = 1 - ((double) Math.abs(v12 - v22) / _interval);
			return (aux1 + aux2) / 2;
		}
		
		/** Applicable to Integer */
		public boolean isApplicable(Object o1, Object o2)
		{
			if((o1==null)&&(o2==null))
				return true;
			else if(o1==null)
				return o2 instanceof EstadisticasEquipos;
			else if(o2==null)
				return o1 instanceof EstadisticasEquipos;
			else
				return (o1 instanceof EstadisticasEquipos)&&(o2 instanceof EstadisticasEquipos);
		}

	}
